/* Nombre: validarHorarioPersonal
 * Tabla: Registro_Horario_Per
 * Proposito: validar que despues de un registro
 * en la tabla de horarios.. si se esta incumpliendo
 * se notifique, coloque una multa y registre el evento
 * Version: 1.0
 * Autor: Gerardo Barcia
 */
CREATE OR REPLACE TRIGGER "SISTEMACADE"."validarHorarioPersonal"
AFTER
INSERT OR UPDATE
ON REGISTRO_HORARIO_PER
REFERENCING OLD AS OLD
NEW AS NEW
FOR EACH ROW
DECLARE
horaInicio varchar2(10);
horaFin varchar2(10);
hora timestamp(7);
nombrePersonal varchar2(30);
descripcionEvento varchar2(255):= 'Incumplimiento de horario';
BEGIN
SELECT pm.datopersonal.nombre INTO nombrePersonal FROM personal_medico pm
WHERE pm.cedulapersonal = 19040601;
IF :NEW.horasalida is NULL THEN
SELECT h.horainicio INTO horaInicio FROM personal_medico pm, horario h 
WHERE pm.idhorario = h.idhorario
AND pm.cedulapersonal = :NEW.cedulapersonal;
hora := TO_TIMESTAMP(horaInicio,'HH24:MI');
IF :NEW.horaEntrada > hora THEN
INSERT INTO SISTEMACADE.DESCUENTO_SUELDO_PERSONAL(IDDSP, IDDESCUENTOSUELDO, CEDULAPERSONAL) 
VALUES(SEQ_IDREGISTROHORARIO.nextval, 3, :NEW.cedulapersonal);
INSERT INTO SISTEMACADE.EVENTO(IDEVENTO, FECHA, DESCRIPCION, RESUELTO, CEDULAPERSONAL, IDPLANTA) 
VALUES(SEQ_IDEVENTO.nextval, SYSDATE, descripcionEvento, 0, :NEW.cedulaPersonal, 1);
DBMS_OUTPUT.put_line('El Sr(Sra). ' || nombrePersonal || ' ha sido multado por llegar tarde al trabajo');
END IF; 
ELSE IF :NEW.horasalida is not NULL THEN
SELECT h.horafin INTO horaFin FROM personal_medico pm, horario h 
WHERE pm.idhorario = h.idhorario
AND pm.cedulapersonal = :NEW.cedulapersonal;
hora := TO_TIMESTAMP(horaFin,'HH24:MI');
IF hora > :NEW.horasalida THEN
INSERT INTO SISTEMACADE.DESCUENTO_SUELDO_PERSONAL(IDDSP, IDDESCUENTOSUELDO, CEDULAPERSONAL) 
VALUES(SEQ_IDREGISTROHORARIO.nextval, 3, :NEW.cedulapersonal);
INSERT INTO SISTEMACADE.EVENTO(IDEVENTO, FECHA, DESCRIPCION, RESUELTO, CEDULAPERSONAL, IDPLANTA) 
VALUES(SEQ_IDEVENTO.nextval, SYSDATE, descripcionEvento, 0, :NEW.cedulaPersonal, 1);
DBMS_OUTPUT.put_line('El Sr(Sra). ' || nombrePersonal || ' ha sido multado por salir antes de la hora estipulada');
END IF;
END IF;
END IF;
END;